/*
-----------------------------------------------------------------------------
This source file is part of SapphireEngine

SapphireEngine is a Framework for Turn Based Strategy games.
For more information see http://code.google.com/p/sapphire-engine/

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place - Suite 330, Boston, MA 02111-1307, USA, or go to
http://www.gnu.org/copyleft/lesser.txt.

-----------------------------------------------------------------------------
*/
#ifndef _SAPPHIRE_MEMORY_MANAGER_H
#define _SAPPHIRE_MEMORY_MANAGER_H


#include "SapphirePrerequisites.h"
#include <typeinfo>
using namespace Ogre;

namespace SapphireEngine
{
	typedef std::pair<void*,Ogre::String> PointerMapItem;
	typedef HashMap<void*,Ogre::String>::iterator PointerMapIterator;

	#define getMemoryManager SapphireMemoryManager::getSingletonPtr 

	class SapphireMemoryManager : public Ogre::Singleton<SapphireMemoryManager>
	{
	public:
		SapphireMemoryManager();
		
		~SapphireMemoryManager();
		
		void addPointer(void* ptr,Ogre::String name);

		void removePointer(void* ptr);

		static SapphireMemoryManager& getSingleton(void);
		static SapphireMemoryManager* getSingletonPtr(void);
	protected:
		HashMap<void*,Ogre::String> mPointerMap;
	};
}
#endif